package com.woniuxy.yogaapp.util;


import com.fasterxml.jackson.databind.ObjectMapper;
import com.woniuxy.yogaapp.pojo.Chat;


import javax.websocket.RemoteEndpoint;
import javax.websocket.Session;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 后台向前端发送信息的工具类
 */
public class WebSocketUtil {

    //存放在线人的session
    public static final Map<Integer, Session> MESSAGEMAP = new ConcurrentHashMap<>();

    /**
     * 发送消息给客户端
     * @param session
     * @param chat
     */
    public static void sendChat(Session session, Chat chat) {
        if (session!=null) {
            final RemoteEndpoint.Basic basic = session.getBasicRemote();
            if (basic!=null) {
                try {
                    //发送消息回客户端
                    basic.sendText(new ObjectMapper().writeValueAsString(chat));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 发送通知给所有人
     * @param chat
     */
    public static void sendChatToAll(Chat chat) {
        MESSAGEMAP.forEach((sessionId,session)->sendChat(session,
                chat));
    }

    /**
     * 发送私聊给给好友
     * @param chat
     * @return 返回的1代表发送成功 2代表发送失败
     */
    public static int sendChatToOne(Chat chat) {
        //获取接受人的的session
        Session session = MESSAGEMAP.get(chat.getRecipient());
        //给接受人发送信息
        if (session != null) {
            sendChat(session, chat);
            return 1;
        } else {
            return 2;
        }
    }

}
